<?php

require_once 'classes/Region.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de région
 * @author Zikrija
 * @date 04.05.2012
 */
class SCregion {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une région
    * @param Région Région à ajouter
    */
    public function ajouter($uneRegionAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO region " .
                "(nom, pays_nom) VALUES(".
                ":nom, :pays_nom)");

            $query->execute(array(
                'nom'             => $uneRegionAAjouter->getNom() ,
                'pays_nom'        => $uneRegionAAjouter->getPays_nom()
                ));

            $query->closeCursor();
        }
        catch(PDOException $e){
            return new Message("Région non ajoutée: ".$e->getMessage());
        }
        return $uneRegionAAjouter;
   }
    /**
     * Methode permettant de modifier une région
     * @param Region La région avec les nouvelles valeurs
     * @param Region La région avec les anciennes valeurs
     * @return boolean 
     */
    public function modifier($uneNouvelleRegion, $uneAncienneRegion){
        try{

            $query =  $this->db->prepare("UPDATE region SET ".
                "nom = :nouveauNom, pays_nom = :nouveauPays_nom ".
                "WHERE nom = :ancienNom AND pays_nom = :ancienPays_nom");

            $query->execute(array(
                'nouveauNom'           => $uneNouvelleRegion->getNom(),
                'nouveauPays_nom'      => $uneNouvelleRegion->getPays_nom() ,
                'ancienNom'            => $uneAncienneRegion->getNom(),
                'ancienPays_nom'       => $uneAncienneRegion->getPays_nom()
            ));

            $query->closeCursor();


        }
        catch(PDOException $e){
            return new Message("Région non modifiée: ".$e->getMessage());
        }
        return $uneNouvelleRegion;
    }
    /**
     * Methode permettant de supprimer une région
     * @param Region Région à supprimer
     * @return boolean 
     */
    public function supprimer($uneRegionASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM region WHERE nom = :nom AND pays_nom = :pays_nom");
            $query->execute(array(
                'nom'           => $uneRegionASupprimer->getNom(),
                'pays_nom'      => $uneRegionASupprimer->getPays_nom()
            ));            
            $query->closeCursor();
            
            $message = new Message("Region supprimée"); 
        }
        catch(PDOException $e){
            print($e->getMessage());
            $message = new Message("Region non supprimée");
        }
        return $message;
    }
   
    /**
     *
     * @param Région  de recherche sous forme d'objet Animal
     * @return un tableau d'objet Region
     */
    public function lister($regionALister){
        try{
            $sql="SELECT * FROM region ";
            $sql_Where="WHERE";
            if($regionALister!=NULL)
            {
                if($regionALister->getNom()!=NULL)
                    $sql_Where.=" nom = '".$regionALister->getNom()."' AND ";
                if($regionALister->getPays_nom()!=NULL)
                    $sql_Where.=" pays_nom = '".$regionALister->getPays_nom()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY pays_nom, nom;";
            $lesRegionsTrouvees=NULL;
            $uneRegionLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $uneRegionLue = new Region($row['nom'], $row['pays_nom']);

                $lesRegionsTrouvees[]=$uneRegionLue;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesRegionsTrouvees=NULL;
        }
        return $lesRegionsTrouvees;
    } 
}

?>
